package com.example.student.mapper;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.example.student.generated.entity.Student;
import com.example.student.generated.entity.StudentCourse;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;

public interface myStudentMapper extends BaseMapper<Student> {
    /*xml中定义sql*/
    //内连接
    //功能：查找已有选课记录的（满足条件的）学生
    List<Student> selectInnerXml(@Param(Constants.WRAPPER) Wrapper<Student> wrapper);

    //左外连接
    //功能：查找没有选课记录的（满足条件的）学生
    List<Student> selectLeftXml(@Param(Constants.WRAPPER) Wrapper<Student> wrapper);

    //右外连接
    //功能：查找没有选课记录的（满足条件的）学生的选课记录
    //无意义，选课记录在插入时必须与学生id一一对应，此时右外联结为空
    List<StudentCourse> selectRightXml(@Param(Constants.WRAPPER) Wrapper<Student> wrapper);

    /*mapper中定义sql*/
    //内连接
    //功能：查找已有选课记录的（满足条件的）学生
    @Select("select * from student,choose_cour where student.id=choose_cour.stu_id")
    List<Student> selectInner(@Param(Constants.WRAPPER) Wrapper<Student> wrapper);

    //左外连接
    //功能：查找没有选课记录的（满足条件的）学生
    @Select("select * from student left join choose_cour on student.id=choose_cour.stu_id")
    List<Student> selectLeft(@Param(Constants.WRAPPER) Wrapper<Student> wrapper);

    //右外连接
    //功能：查找没有选课记录的（满足条件的）学生的选课记录
    //无意义，选课记录在插入时必须与学生id一一对应，此时右外联结为空
    @Select("select * from student right join choose_cour on student.id=choose_cour.stu_id")
    List<StudentCourse> selectRight(@Param(Constants.WRAPPER) Wrapper<Student> wrapper);
}
